From: Jonas Ã…dahl Date: Tue, 29 Nov 2022 15:33:34 +0000 (+0100) Subject: ui/main: Allow not inhibiting animations sometimes X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~405^2^2~217 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=33d3a65646d0333605d7f1c552ef080645203c00;p=gnome-shell.git ui/main: Allow not inhibiting animations sometimes When we're running in e.g. CI, or in a virtual machine without hardware acceleration, and we actually want to enable animations despite the potential performance implications, change the AnimationsSettings to only inhibit if we're a XVNC instance or not hardware accelerated if --force-animations wasn't passed. Still inhibit animations if there is a remote desktop session that explicitly disables animations. Part-of: --- diff --git a/js/ui/main.js b/js/ui/main.js index b6f54da9e..ad9470bf8 100644 --- a/js/ui/main.js +++ b/js/ui/main.js @@ -919,43 +919,62 @@ function showRestartMessage(message) { var AnimationsSettings = class { constructor() { - let backend = global.backend; - if (!backend.is_rendering_hardware_accelerated()) { - St.Settings.get().inhibit_animations(); - return; - } + this._animationsEnabled = true; + this._handles = new Set(); - let isXvnc = Shell.util_has_x11_display_extension( - global.display, 'VNC-EXTENSION'); - if (isXvnc) { - St.Settings.get().inhibit_animations(); - return; + global.connect('notify::force-animations', + this._syncAnimationsEnabled.bind(this)); + this._syncAnimationsEnabled(); + + const backend = global.backend; + const remoteAccessController = backend.get_remote_access_controller(); + if (remoteAccessController) { + remoteAccessController.connect('new-handle', + (_, handle) => this._onNewRemoteAccessHandle(handle)); } + } + + _shouldEnableAnimations() { + if (this._handles.size > 0) + return false; - let remoteAccessController = backend.get_remote_access_controller(); - if (!remoteAccessController) + if (global.force_animations) + return true; + + const backend = global.backend; + if (!backend.is_rendering_hardware_accelerated()) + return false; + + if (Shell.util_has_x11_display_extension( + global.display, 'VNC-EXTENSION')) + return false; + + return true; + } + + _syncAnimationsEnabled() { + const shouldEnableAnimations = this._shouldEnableAnimations(); + if (this._animationsEnabled === shouldEnableAnimations) return; - this._handles = new Set(); - remoteAccessController.connect('new-handle', - (_, handle) => this._onNewRemoteAccessHandle(handle)); + const settings = St.Settings.get(); + if (shouldEnableAnimations) + settings.uninhibit_animations(); + else + settings.inhibit_animations(); } _onRemoteAccessHandleStopped(handle) { - let settings = St.Settings.get(); - - settings.uninhibit_animations(); this._handles.delete(handle); + this._syncAnimationsEnabled(); } _onNewRemoteAccessHandle(handle) { if (!handle.get_disable_animations()) return; - let settings = St.Settings.get(); - - settings.inhibit_animations(); this._handles.add(handle); + this._syncAnimationsEnabled(); handle.connect('stopped', this._onRemoteAccessHandleStopped.bind(this)); } };